package com.example.hahaproduct.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.HashMap;

/**
 * @author Administrator
 * @create 2024-12-14
 */
public class AutoGeneratorConfig {
    public static void main(String[] args) {
        //全局配置
        GlobalConfig config = new GlobalConfig();
        String path = System.getProperty("user.dir");
        System.out.println(path);
        config.setActiveRecord(false)//开启AR模式
                .setAuthor("hhn")//设置作者
                .setOpen(true)
                .setSwagger2(true)//实体属性 Swagger2 注解
                .setOutputDir(path+"/haha-product/src/main/java")//生成路径(一般都是生成在此项目的src/main/java下面)
                .setFileOverride(true)//第二次生成会把第一次生成的覆盖掉
                .setEnableCache(false)//XML二级缓存
                .setIdType(IdType.ASSIGN_UUID)//主键策略
                .setServiceName("%sService")//生成的service接口名字首字母是否为I，这样设置就没有I
                .setBaseColumnList(true)//生成resultMap
                .setBaseResultMap(true);//在xml中生成基础列

        //数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://118.178.138.68:3306/product?useUnicode=true&useSSL=false&characterEncoding=utf8")
                .setDbType(DbType.MYSQL)//数据库类型
                .setDriverName("com.mysql.jdbc.Driver")
                .setUsername("root")
                .setPassword("HHN106+++");

        //3、策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)//开启全局大写命名
                .setNaming(NamingStrategy.underline_to_camel)//下划线到驼峰的命名方式
                .setColumnNaming(NamingStrategy.underline_to_camel)
                //.setTablePrefix("tb_","pos_")//表名前缀
                .setEntityLombokModel(true)//使用lombok
                .setEntityBuilderModel(true)//lombok的链式调用
                //.setLogicDeleteFieldName("deleted")//配置逻辑删除字段
                .setRestControllerStyle(true);//使用restController
        //.setInclude("tb_user");//逆向工程使用的表
        //.setExclude("")//需要排除的表
        // 自定义实体父类
        // .setSuperEntityClass("com.foryor.entity.BaseEntity")
        // 自定义实体，公共字段
        //.setSuperEntityColumns(new String[]{"deleted"});
        //.setTableFillList(new ArrayList<>());
        //4、包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        HashMap<String, String> pathInfo = new HashMap<>();
        pathInfo.put(ConstVal.XML_PATH, path+"/src/main/resources/mapper");
        packageConfig
                .setParent("com.example.hahaproduct")
                .setEntity("entity")
                .setMapper("mapper")
                .setService("service")
                .setServiceImpl("service.impl")
                .setController("controller")
                .setXml("mapper.mapper");//设置xml文件的目录

        //模板配置
        TemplateConfig templateConfig = new TemplateConfig();
        //不生成
        //templateConfig.setEntity(null);
        //templateConfig.setMapper(null);
        //templateConfig.setXml(null);
        //templateConfig.setService(null);
        //templateConfig.setServiceImpl(null);
        //templateConfig.setController(null);

        //5、整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(config)
                .setDataSource(dsc)
                .setTemplate(templateConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);
        //6、执行
        autoGenerator.execute();



    }
}
